/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package videorent;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.Locale;

/** Representa a una pelicula.
 *
 * @author dayi
 */
public class Pelicula extends Audiovisual {

    private String genero;
    private String formato;
    private ArrayList<String> directores;
    private ArrayList<String> escritores;
    private String secuela;

    /** Este es el constructor con todos los datos de una película
     * @param cantidad Cantidad de peliculas iguales.
     * @param nombre Nombre de la película.
     * @param ano Año de la película.
     * @param genero Genero de la película.
     * @param formato Formato de la película.
     * @param directores ArrayList de directores de la película.
     * @param escritores ArrayList de escritores de la película.
     * @param actores ArrayList de los actores de la pelicula.
     * @param secuela Nombre de la secuela de la pelicula.
     * @param estatus Estatus de la pelicula, en "existencia" o "alquilada"
     * @param fechaDev Fechade la devolución de la película en caso de que se Alquile.
     */
    public Pelicula(String codigo, int cantidad, String nombre, int ano, String genero, String formato, ArrayList<String> directores, ArrayList<String> escritores, ArrayList<String> actores, String secuela, String estatus, GregorianCalendar fechaDev) {
        super(codigo, nombre, ano, estatus, cantidad, actores, fechaDev);
        this.genero = genero;
        this.formato = formato;
        this.directores = directores;
        this.escritores = escritores;
        this.secuela = secuela;
    }

    /** Este es el constructor con todos los datos de una película
     * @param cantidad Cantidad de peliculas iguales.
     * @param nombre Nombre de la película.
     * @param ano Año de la película.
     * @param genero Genero de la película.
     * @param formato Formato de la película.
     * @param directores ArrayList de directores de la película.
     * @param escritores ArrayList de escritores de la película.
     * @param actores ArrayList de los actores de la pelicula.
     * @param secuela Nombre de la secuela de la pelicula.
     * @param estatus Estatus de la pelicula, en "existencia" o "alquilada"
     */
    public Pelicula(String codigo, int cantidad, String nombre, int ano, String genero, String formato, ArrayList<String> directores, ArrayList<String> escritores, ArrayList<String> actores, String secuela, String estatus) {
        super(codigo, nombre, ano, estatus, cantidad, actores);
        this.genero = genero;
        this.formato = formato;
        this.directores = directores;
        this.escritores = escritores;
        this.secuela = secuela;
    }

    /** Este metodo se encarga de devolver la lista de los directores de la Película.
     * @return Lista de Directores.
     */
    public ArrayList<String> getDirectores() {
        return (ArrayList<String>) directores.clone();
    }

    /** Este metodo se encarga de asignar una lista de los directores a la Película.
     * @param directores Lista de Directores.
     */
    public void setDirectores(ArrayList<String> directores) {
        this.directores = directores;
    }

    /** Este metodo se encarga de devolver la lista de los Escritores de la Película.
     * @return Lista de Escritores.
     */
    public ArrayList<String> getEscritores() {
        return (ArrayList<String>) escritores.clone();
    }

    /** Este metodo se encarga de asignar la lista de los Escritores de la Película.
     * @param escritores Lista de Escritores.
     */
    public void setEscritores(ArrayList<String> escritores) {
        this.escritores = escritores;
    }

    /** Este metodo se encarga de retornar el formato de la Película.
     * @return Formato de la Pelicula.
     */
    public String getFormato() {
        return formato;
    }

    /** Este metodo se encarga de asignar un formato a la Película.
     * @param formato Formato de la Pelicula.
     */
    public void setFormato(String formato) {
        this.formato = formato;
    }

    /** Este metodo se encarga de retornar el Género de la Película.
     * @return Género de la Pelicula.
     */
    public String getGenero() {
        return genero;
    }

    /** Este metodo se encarga de asignar el Género de la Película.
     * @param genero de la Pelicula.
     */
    public void setGenero(String genero) {
        this.genero = genero;
    }

    /** Este metodo se encarga de retornar el formato de la Película.
     * @return Formato de la Pelicula.
     */
    public String getSecuela() {
        return secuela;
    }

    public void setSecuela(String secuela) {
        this.secuela = secuela;
    }

    /** Este metodo se encarga de devolver un String con los datos de la pelicula
     * con el formato adecuado.
     * @return Linea a escribir en el archivo.
     */
    public String obtenerDatos() {
        String linea = "";
        linea += this.getCantidad() + " & ";
        linea += this.getNombre() + " & ";
        linea += this.getAno() + " & ";
        linea += this.getGenero() + " & ";
        linea += this.getFormato() + " & ";

        // Devolvemos los arreglos separados por coma [a,b,c]
        String directoresS = this.getDirectores().toString();
        String escritoresS = this.getEscritores().toString();
        String AtoresS = this.getActores().toString();

        // Quitamos los []
        linea += directoresS.substring(1, directoresS.length() - 1) + " & ";
        linea += escritoresS.substring(1, escritoresS.length() - 1) + " & ";
        linea += AtoresS.substring(1, AtoresS.length() - 1);

        // Si existe una secuela la agregamos
        if (this.getSecuela() != null && !this.getSecuela().equals("")) {
            linea += " & " + this.getSecuela();
        }

        GregorianCalendar fd = this.getFechaDevolucion();
        if (fd != null) {
            linea += " & " +  fd.get(GregorianCalendar.DAY_OF_MONTH) + "/" + fd.get(GregorianCalendar.MONTH) + "/" + fd.get(GregorianCalendar.YEAR);
        }

        return linea;
    }
}
